package me.xiaoyan.android.widget;

import java.util.Arrays;
import java.util.Random;

public class RandomUtils {
	public static void main(String[] args) {
		String s = genRandomPassword(24, false, true);
		System.out.println(s);
	}

	public static String genRandomPassword(int pwd_len, boolean letters,
			boolean numbers) {
		// 35是因为数组是从0开始的，26个字母+10个数字
		final int maxNum = 36;
		int i; // 生成的随机数
		int count = 0; // 生成的密码的长度

		String[] word = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j",
				"k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v",
				"w", "x", "y", "z" };
		String[] number = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };

		String[] str = null;
		if (letters && numbers) {
			str = concatAll(word, number);
		} else if (letters) {
			str = word;
		} else if (numbers) {
			str = number;
		}
		StringBuffer pwd = new StringBuffer("");
		Random r = new Random();
		while (count < pwd_len) {
			// 生成随机数，取绝对值，防止生成负数，
			i = Math.abs(r.nextInt(maxNum)); // 生成的数最大为36-1
			if (i >= 0 && i < str.length) {
				pwd.append(str[i]);
				count++;
			}
		}

		return pwd.toString();
	}

	public static <T> T[] concatAll(T[] first, T[]... rest) {
		int totalLength = first.length;
		for (T[] array : rest) {
			totalLength += array.length;
		}
		T[] result = Arrays.copyOf(first, totalLength);
		int offset = first.length;
		for (T[] array : rest) {
			System.arraycopy(array, 0, result, offset, array.length);
			offset += array.length;
		}
		return result;
	}

}
